import cv2
import os
from pathlib import Path
import shutil

def find_latest_best_model(dir_path):
    """
    查找指定目录中最新的 best 模型文件。
    
    :param dir_path: 模型文件所在的目录
    :return: 最新best模型的路径（字符串）
    """
    # 获取所有以 _best.pt 结尾的文件路径
    best_models = list(Path(dir_path).glob('*_best.pt'))
    
    if not best_models:
        # 如果没有找到任何 best 模型文件，则认为还没开始训练，以YOLO11m作为初始模型开始训练
        return "../best.pt"
    
    # 按文件修改时间排序，取最新的一个
    best_models.sort(key=lambda x: x.stat().st_mtime, reverse=True)
    return str(best_models[0])  # 将 Path 对象转换为字符串返回

def clean_old_files(upload_dir, max_keep=20):
    """
    清理20次以前的临时文件。

    :param upload_dir: 临时文件目录
    :param max_keep: 最多保留的文件数量
    """
    if not os.path.exists(upload_dir):
        return

    files = [os.path.join(upload_dir, f) for f in os.listdir(upload_dir)]
    files.sort(key=os.path.getmtime, reverse=True)  # 按修改时间降序排序

    # 删除多余的文件
    for file in files[max_keep:]:
        try:
            # 如果是文件夹，使用 shutil.rmtree 递归删除
            if os.path.isdir(file):
                shutil.rmtree(file)
            else:
                os.remove(file)
        except Exception as e:
            print(f"删除文件/目录 {file} 时出错: {e}")